/**
 * 点击除输入框及虚拟键盘外元素时，隐藏虚拟键盘
 * @param  {e} 点击的元素
 */
export const judgeCloseKeyboard = e => {
  e.stopPropagation(); // 阻止事件冒泡
  let arr = document.querySelectorAll('.input-keyboard'); // 设置目标区域
  let flag = false;
  const excludeClassName = [
    'input-keyboard', // 带虚拟键盘的输入框
    'n-input__input', // 输入框
    'n-input__input-el', // 输入框
    'n-input-wrapper',
    'n-input__clear', // 输入框-清除图标
    'n-textarea__inner', // 输入框-textarea
    'n-input__suffix', // 输入框
    'hg-candidate-box', // 中文选择框
    'hg-candidate-box-prev', // 中文选择框-上一页
    'hg-candidate-box-list', // 中文选择框-内容列表
    'hg-candidate-box-list-item', // 中文选择框-内容选项
    'hg-candidate-box-next', // 中文选择框-下一页
    'hg-theme-default', // 虚拟键盘
    'hg-rows', // 虚拟键盘-内容
    'hg-row', // 虚拟键盘-行
    'hg-button' // 虚拟键盘-按钮
  ];
  let classList = e.target.classList.value.split(' ');
  let concatArr = excludeClassName.concat(classList);

  arr.forEach(ele => {
    // 判断点击事件发生在区域外的条件是：1. 点击事件的对象不是目标区域本身 2. 事件对象同时也不是目标区域的子元素
    if (
      // 判断当前点击的元素类名，是否包含排除元素
      new Set(concatArr).size === concatArr.length &&
      !ele.contains(e.target)
    ) {
      flag = true;
    }
  });
  flag && hideKeyboard();
};

/**
 * 隐藏虚拟键盘
 */
export const hideKeyboard = () => {
  let arr = document.querySelectorAll('.hg-theme-default');
  // console.log(arr)
  arr.forEach((ele: any) => {
    // console.log(ele);
    if (!ele.getAttribute('focus')) {
      ele.style.visibility = 'hidden';
    }
  });
};

export const setValFn = (inputType = 'text', value, firstOpen = false, precision=2) => {
  if (inputType === 'number') {
    // console.log(value);
    if (value) {
      let newVal = value.toString();
      //得到第一个字符是否为负号
      let t = newVal.charAt(0);
      //先把非数字的都替换掉，除了数字和.
      newVal = newVal.replace(/[^\d\.]/g, '');
      //必须保证第一个为数字而不是.
      newVal = newVal.replace(/^\./g, '');
      //保证只有出现一个.而没有多个.
      newVal = newVal.replace(/\.{2,}/g, '.');

      if (!firstOpen) {
        //保证.只出现一次，而不能出现两次以上
        newVal = newVal
          .replace('.', '$#$')
          .replace(/\./g, '')
          .replace('$#$', '.');

        //只能输入两个小数
        newVal = newVal.replace(/^(\-)*(\d+)\.(\d{2,3}).*$/, '$1$2.$3');
      }

      //如果第一位是负号，则允许添加
      if (t === '-') {
        newVal = '-' + newVal;
      }

      if (!newVal.includes('.') && t === '0' && newVal.length > 1) {
        newVal = newVal.slice(1);
      }

      if (firstOpen) {
        if (newVal.split('.').length > 2) {
          newVal = newVal.slice(0, newVal.length - 1);
        } else {
          const l = newVal.charAt(newVal.length - 1);

          if (l !== '.') {
            newVal = l;
          }
        }
      }

      if (precision && newVal) {
        const list = newVal.split('.');

        if (list && list.length === 2) {
          if (list[1]) {
            list[1] = list[1].slice(0, precision);

            newVal = list.join('.');
          }
        }
        // newVal = Number(newVal).toFixed(precision).toString();
      }

      return newVal;
    }
  }

  return value;
};
